package bean.dao;

import java.util.List;

import hbt.HibernateUtil;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import dominio.Cotizacion;
import dominio.FormaPago;
import dominio.SolicitudCotizacion;

public class HibernateCotizacionDAO {
	private static HibernateCotizacionDAO instancia = null;
	private static SessionFactory sf = null;
	private Session session = null;
	
	public static HibernateCotizacionDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateCotizacionDAO();
		} 
		return instancia;
	}
	
	private Session getSession(){
		if(session == null || !session.isOpen())
			session = sf.openSession();
		return session;
	}
	
	public void closeSession(){
		if (session.isOpen()) session.close();
	}
	
	public void persistCotizacion(Cotizacion cotizacion){
		Session s=getSession();
		s.beginTransaction();
		s.persist(cotizacion);
		s.flush();
		s.getTransaction().commit();
	}
	
	public void updateCotizacion(Cotizacion cotizacion){
		Session s=getSession();
		s.beginTransaction();
		s.update(cotizacion);
		s.flush();
		s.getTransaction().commit();
	}
	
	public Cotizacion getCotizacion(int numeroCotizacion){
		Session s=getSession();
		s.beginTransaction();
		Cotizacion cotizacion = (Cotizacion)s.get(Cotizacion.class, numeroCotizacion);
		s.getTransaction().commit();
		return cotizacion;
	}
	
	public SolicitudCotizacion getSolicitudCotizacion(int numeroSolicitud){
		Session s=getSession();
		s.beginTransaction();
		SolicitudCotizacion solicitud = (SolicitudCotizacion)session
								.createQuery("from SolicitudCotizacion where nrosolicitud = :numeroSolicitud ")
								.setParameter("numeroSolicitud", numeroSolicitud)
								.uniqueResult();
		s.getTransaction().commit();
		return solicitud;
	}
	
	public void agregarSolicitudCotizacion(List<SolicitudCotizacion> items){
		Session s= getSession();
		s.beginTransaction();
		for(SolicitudCotizacion sc:items)
			s.persist(sc);
		s.flush();
		s.getTransaction().commit();
	}
	
	public void agregarSolicitud(SolicitudCotizacion sc){
		Session s = getSession();
		s.beginTransaction();
		s.persist(sc);
		s.flush();
		s.getTransaction().commit();
	}
}
